# -*- coding: utf-8 -*-

"""
@author: 11238 Diogo Silva
@author: 11392 Raul Gonçalo Palma
@last updated: 30/11/2014
@obs: Modulo que contém métodos que irão ser utilizados na interface
"""

from WorkDB import *
from WorkGraph import *
from operator import truediv


class Regulator():
    """
    Classe que funciona como uma classe intermédia
    """

    DATABASE = "Evolucao_Salarios.db"

    def __init__(self):
        """
        Construtor da class Regulator
        """
        self.work = WorkingDB(Regulator.DATABASE)
        self.graph = Graph()

    def load_from_excel(self, xls_file, sheet_number=0):
        """
        Cria a tabela e preenche-a com os dados do ficheiro xls
        :param xls_file: O ficheiro xls
        :param sheet_number: O número da folha onde vão ser lidos os dados
        """
        self.work.create_populate_table(xls_file, sheet_number)

    def draw_graph(self, init_year, final_year, field):
        """
        Desenha um gráfico de acordo com os dados definidos
        :param init_year: O ano inicial
        :param final_year: O ano final
        :param field: Campo da tabela
        """
        title = ""
        xlabel = ""
        ylabel = ""

        if field == self.work.IPC_GLOBAL:
            title = "Variacao do IPC Global com o decorrer dos anos"
            xlabel = "Anos"
            ylabel = "IPC Global"

        elif field == self.work.VARIACAO_ANUAL:
            title = "Variacao da Variacao Anual com o decorrer dos anos"
            xlabel = "Anos"
            ylabel = "Variacao Anual"
        elif field == self.work.REMUNERACAO_MINIMA_MENSAL:
            title = "Variacao da Remuneracao minima mensal com o decorrer" + \
                    " dos anos"
            xlabel = "Anos"
            ylabel = "Remuneracao Minima Mensal"

        elif field == self.work.REMUNERACAO_MAXIMA_MENSAL:
            title = "Variacao da Remuneracao maxima mensal com o decorrer" + \
                    " dos anos"
            xlabel = "Anos"
            ylabel = "Remuneracao Maxima Mensal"

        elif field == self.work.PIB_PER_CAPITA_ANUAL:
            title = "Variacao do PIB PER capita anual com o decorrer dos anos"
            xlabel = "Anos"
            ylabel = "PIB PER capita anual"

        elif field == self.work.RENDIMENTO_NACIONAL_BRUTO_PER_CAPITA_ANUAL:
            title = "Variacao do Rendimento nacional bruto per capita" + \
                    " anual com o decorrer dos anos"
            xlabel = "Anos"
            ylabel = "Rendimento nacional bruto per capita anual"

        elif field == self.work.RENDIMENTO_DISPONIVEL_BRUTO_PER_CAPITA_ANUAL:
            title = "Variacao do Rendimento disponivel bruto per capita" + \
                    " anual com o decorrer dos anos"
            xlabel = "Anos"
            ylabel = "Rendimento disponivel bruto per capita anual"

        elif field == self.work.REMUNERACOES_PER_CAPITA_ANUAL:
            title = "Variacao do Remuneracoes per capita anual" + \
                    "com o decorrer dos anos"
            xlabel = "Anos"
            ylabel = "Remuneracoes per capita anual"

        data = self.work.queries(init_year, final_year, field)
        self.graph.draw_graph(data[0], data[1])
        self.graph.show_graph(title, xlabel, ylabel)

    def minimum_evolution(self, init_year, final_year):
        """
        Apresenta um gráfico com a evolução da remuneração mínima mensal
        :param init_year: O ano inicial
        :param final_year: O ano final
        """
        ipc_values = self.work.queries(init_year,
                                       final_year, self.work.IPC_GLOBAL)
        minimum_remuneration_values = self.work.queries(
            init_year, final_year, self.work.REMUNERACAO_MINIMA_MENSAL)
        minimum_monthly_evolution = map(truediv, minimum_remuneration_values[1]
                                        , ipc_values[1])

        self.graph.draw_graph(ipc_values[0], minimum_monthly_evolution,
                              "Evolucao das Remunaracoes Minimas")

    def maximum_evolution(self, init_year, final_year):
        """
        Apresenta um gráfico com a evolução da remuneração máxima mensal
        :param init_year: O ano inicial
        :param final_year: O ano final
        """
        ipc_values = self.work.queries(init_year,
                                       final_year, self.work.IPC_GLOBAL)
        maximum_remuneration_values = self.work.queries(
            init_year, final_year, self.work.REMUNERACAO_MAXIMA_MENSAL)
        maximum_monthly_evolution = map(truediv, maximum_remuneration_values[1]
                                        , ipc_values[1])

        self.graph.draw_graph(ipc_values[0], maximum_monthly_evolution,
                              "Evolucao das Remunaracoes Maximas")

    def remuneration_evolution(self, init_year, final_year):
        """
        Apresenta dois gráficos com a evolução das remunerações
        :param init_year: O ano inicial
        :param final_year: O ano final
        """
        title = "Evolucoes das remuneracoes ao longo dos anos"
        xlabel = "Anos"
        ylabel = "Evolucoes das remuneracoes"

        self.minimum_evolution(init_year, final_year)
        self.maximum_evolution(init_year, final_year)
        self.graph.show_graph(title, xlabel, ylabel)